<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>43. 字符串相乘</title>
  </head>
  <body>
    <script>
      //     给定两个以字符串形式表示的非负整数 num1 和 num2，返回 num1 和 num2 的乘积，它们的乘积也表示为字符串形式。

      // 注意：不能使用任何内置的 BigInteger 库或直接将输入转换为整数。

      //

      // 示例 1:

      // 输入: num1 = "2", num2 = "3"
      // 输出: "6"
      // 示例 2:

      // 输入: num1 = "123", num2 = "456"
      // 输出: "56088"
      //

      // 提示：

      // 1 <= num1.length, num2.length <= 200
      // num1 和 num2 只能由数字组成。
      // num1 和 num2 都不包含任何前导零，除了数字0本身。

      // 来源：力扣（LeetCode）
      // 链接：https://leetcode.cn/problems/multiply-strings
      // 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
      /**
       * @param {string} num1
       * @param {string} num2
       * @return {string}
       */
      var multiply = function (num1, num2) {
        if (isNaN(num1) || isNaN(num2)) return ''
        if (num1 === '0' || num2 === '0') return '0'

        let l1 = num1.length,
          l2 = num2.length

        let result = []

        for (let i = l1 - 1; i >= 0; i--) {
          for (let j = l2 - 1; j >= 0; j--) {
            let index1 = i + j
            let index2 = i + j + 1

            let product = num1[i] * num2[j] + (result[index2] || 0)
            result[index2] = product % 10
            result[index1] = Math.floor(product / 10) + (result[index1] || 0)
          }
        }
        return result.join('').replace(/^0+/, '')
      }
    </script>
  </body>
</html>
